#include "Function/Interactive.h"
#include "Device/LCD1602.h"
#include "Device/Buzzer.h"
#include "Device/NixieTube.h"
#include <string.h>
#include <math.h>

#define menuStrCount 4

void InteractiveInit()
{
	NixieInit();
	LCD1602_Init();
}

//uint8 InteractiveShowMenu()
//{
//	char code menuStr[][15]={"1.Temperature ","2.PhotoCell   ","3.Distance    ","4.Time        "};
//	VAR int8 menuChoose=0;
//	VAR uint8 key=0;
//	VAR uint8 menuNow=0;
//	VAR uint8 menuNext=1;
//	bool  isKey=true;

//	goto start;
//	while(1)
//	{
//		key=GetMatKeyPress();
//		if(key=='\n')
//		{
//			break;
//		}
//		isKey=false;
//start:
//		if(key=='\045')
//		{
//			if((--menuChoose)<=-1)
//			{
//				menuChoose=menuStrCount-1;
//				menuNow=menuStrCount-1;
//				menuNext=0;
//			}
//			else
//			{
//				menuNow=menuChoose;
//				menuNext=menuNow+1;
//			}
//			isKey=true;
//		}
//		else if(key=='\046')
//		{
//			if((++menuChoose)==menuStrCount-1)
//			{
//				menuNow=menuStrCount-1;
//				menuNext=0;
//			}
//			else if(menuChoose==menuStrCount)
//			{
//				menuNow=0;
//				menuNext=1;
//				menuChoose=0;
//			}
//			else
//			{
//				menuNow=menuChoose;
//				menuNext=menuNow+1;
//			}
//			isKey=true;
//		}
//		
//		if(isKey)
//		{
//			LCD1602_Cls();
//			LCD1602_WriteChar('>');
//			LCD1602_WriteString(menuStr[menuNow],14,1,1);
//			LCD1602_SetCursor(2,0);
//			LCD1602_WriteChar(' ');
//			LCD1602_WriteString(menuStr[menuNext],14,2,1);
//		}
//		
//	}
//	return menuChoose;
//}

//个位整数转化字符串
void _8bit2Str_1(uint8 i,char res[],uint8 startIndex)
{
	res[startIndex+0]=i+0x30;
	res[startIndex+1]=0;
}
//十位整数转化字符串
void _8bit2Str_2(uint8 i,char res[],uint8 startIndex)
{
	res[startIndex+0]=i/10+0x30;
	res[startIndex+1]=(i%10)+0x30;
	res[startIndex+2]=0;
}
//百位整数转化字符串
void _8bit2Str_3(uint8 i,char res[],uint8 startIndex)
{
	res[startIndex+0]=i/100+0x30;
	res[startIndex+1]=(i%100)/10+0x30;
	res[startIndex+2]=i%10+0x30;
	res[startIndex+3]=0;
}

void Temprature2Str(float temprature,char str[],uint8 startIndex)
{
	VAR uint8 tempInt;
	VAR uint8 tempDec;
	temprature=fabs(temprature);
	tempInt=(uint8)temprature;
	tempDec=(temprature-tempInt)*100;
	
	if(tempInt<10)
	{
		_8bit2Str_1(tempInt,str,startIndex);
		str[startIndex+1]='.';
		startIndex+=2;
	}
	else if(tempInt<100)
	{
		_8bit2Str_2(tempInt,str,startIndex);
		str[startIndex+2]='.';
		startIndex+=3;
	}
	else
	{
		_8bit2Str_3(tempInt,str,startIndex);
		str[startIndex+3]='.';
		startIndex+=4;
	}

	_8bit2Str_2(tempDec,str,startIndex);
	str[startIndex + 2] = 0xdf; //"上小数点,二进制11011111"
	str[startIndex+3]='C';
	str[startIndex+4]=0;
}

void Distance2Str(float distance,char str[],uint8 startIndex)
{
	VAR uint8 disInt=(uint8)distance;
	VAR uint8 disDec=(distance-disInt)*100;
	
	_8bit2Str_1(disInt,str,startIndex);
	str[startIndex+1]='.';
	startIndex+=2;
	
	_8bit2Str_2(disDec,str,startIndex);
	str[startIndex + 2] = 'm';
	str[startIndex+3]=0;
}

void InteractiveShowData(float temprature,float distance,uint8 photoCell)
{
	VAR char tempStr[12]="T:+";
	VAR char disStr[8]="D:";
	VAR char photoCellStr[6]="P:";
	
	LCD1602_Cls();
	if(temprature<0.0f)
	{
		tempStr[2]='-';
	}
	if(distance==-1.0f)
	{
		distance=0.0f;
	}
	Temprature2Str(temprature,tempStr,3);
	Distance2Str(distance,disStr,2);
	_8bit2Str_3(photoCell,photoCellStr,2);
	
	LCD1602_WriteString(disStr,strlen(disStr),1,0);
	LCD1602_WriteString(photoCellStr,strlen(photoCellStr),1,10);
	LCD1602_WriteString(tempStr,strlen(tempStr),2,0);
}

void InteractiveAllReady()
{
	Beep(200);
}

//void InteractiveShowPhotoCell(uint8 l)
//{
//	VAR char res[5];
//	LCD1602_Cls();
//	_8bit2Str(l,res);
//	LCD1602_WriteString("PhotoCell:",10,1,0);
//	LCD1602_WriteString(res,3,2,0);
//}
